home *** CD-ROM | disk | FTP | other *** search
/ MacHack 1997 / MacHack 1997.toast / Hacks / Hacks ’97 / Crash & Burn / source code / (Internalized Files) / Development / Libraries / Hubauer / Patching / Patches.c next >
C/C++ Source or Header  |  1995-12-05  |  1KB  |  72 lines

  1. #include "Patches.h"
  2.  
  3. #include <osutils.h>
  4.  
  5. #ifdef __cplusplus
  6. extern "C" {
  7. #endif
  8.  
  9. long BGetTrapAddress(short trap,short tType)
  10. {
  11.     if(tType == ToolTrap){
  12.         return (long)GetToolTrapAddress(trap);
  13.     }else{
  14.         return (long)GetOSTrapAddress(trap);
  15.     }
  16. }
  17.  
  18. void BSetTrapAddress(long proc,short trap,short tType)
  19. {
  20.     if(tType == ToolTrap){
  21.         SetToolTrapAddress((UniversalProcPtr)proc,trap);
  22.     }else{
  23.         SetOSTrapAddress((UniversalProcPtr)proc,trap);
  24.     }
  25. }
  26.  
  27. static TrapType GetTrapType(short tTrap)
  28. {
  29.     const short        trapMask = 0x0800;
  30.     
  31.     if ((tTrap & trapMask) == trapMask)
  32.         return(ToolTrap);
  33.     else
  34.         return(OSTrap);
  35. }
  36.     
  37.  
  38. long BGetTrapAddress1(short trapWord)
  39. {
  40.     return BGetTrapAddress(trapWord,GetTrapType(trapWord));
  41. }
  42.  
  43. void BSetTrapAddress1(long proc,short trapWord)
  44. {
  45.     BSetTrapAddress(proc,trapWord,GetTrapType(trapWord));
  46. }
  47.  
  48.     
  49. void    PatchTrapSafe(short trap,long newProc,long *oldProc)
  50. {
  51.     TrapType    tType = GetTrapType(trap);
  52.     
  53.     *oldProc = BGetTrapAddress(trap,tType);
  54.     BSetTrapAddress(newProc,trap,tType);
  55. }
  56.     
  57. long    PatchTrap(short trap,long newProc)
  58. {
  59.     long        oldTrap;
  60.     TrapType    tType = GetTrapType(trap);
  61.     
  62.     oldTrap = BGetTrapAddress(trap,tType);
  63.     BSetTrapAddress(newProc,trap,tType);
  64.     
  65.     return oldTrap;
  66. }
  67.  
  68. #ifdef __cplusplus
  69. }
  70. #endif
  71.  
  72.